﻿using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Maestro_Proveedores;

namespace Maestro_Proveedores.Forms
{
    public partial class RealizarEvaluacionDeDesempeno : Form
    {
        /// <summary>
        /// Identificador del formulario, esta variable utilizada para controlar el acceso al formulario y para realizar la auditoria
        /// </summary>
        public static string TIPO = "076";
        /// <summary>
        /// Este registro tiene los permisos que tiene usuario que inicio sesion sobre el presente formulario (lectura, escritura, etc..)
        /// </summary>
        private Auditoria.CORPORATIVADataSet.SEG_PERMISOSRow seg_PERMRow = null;        
        /// <summary>
        /// Este formulario tiene la responsabilidad de realizar la evalucion de desempeño a los proveedores de la Corporación. 
        /// </summary>
        public RealizarEvaluacionDeDesempeno()
        {
            InitializeComponent();
            this.SuperiorDateTimePicker.Value = System.DateTime.Now.Date;
            this.inferiorDateTimePicker.Value = System.DateTime.Now.Date; 
            this.inferiorDateTimePicker.MaxDate = this.SuperiorDateTimePicker.Value;
            this.SuperiorDateTimePicker.MinDate = this.inferiorDateTimePicker.Value;
        }
        /// <summary>
        /// en esta variable se guarda la instancia de la clase EvaluacionDeDesempeno que se encarga de encapsular todos las definiciones y metodos que se requieren para llevar a cabo la evalucion.
        /// </summary>
        private Maestro_Proveedores.evaluacionDeDesempeno.EvaluacionDeDesempeno evaluacionDeDesempeno = new Maestro_Proveedores.evaluacionDeDesempeno.EvaluacionDeDesempeno();
        /// <summary>
        /// En esta variable se guardaran los resultados devueltos por la clase EvaluacionDeDesempeno.
        /// </summary>
        private DataTable dataTable = null;
        
        private void pRV_tipo_servicioBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.pRV_tipo_servicioBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.cORPORATIVADataSet);

        }

        private void PruebaEvaluacion_Load(object sender, EventArgs e)
        {
            this.pRV_grupoTableAdapter.Fill(this.cORPORATIVADataSet.PRV_grupo);
            this.pRV_tipo_servicioTableAdapter.Fill(this.cORPORATIVADataSet.PRV_tipo_servicio);            
        }

        private void tipoButton_Click(object sender, EventArgs e)
        {
            if ((this.SuperiorDateTimePicker.Value.Date - this.inferiorDateTimePicker.Value.Date).TotalDays < 1)
            {
                MessageBox.Show("seleccione un rango de fechas valido");
                return;
            }
            this.dataTable = this.evaluacionDeDesempeno.evaluarByIdTipo(int.Parse(this.tipoComboBox.SelectedValue.ToString()), this.inferiorDateTimePicker.Value.Date, DateTime.Parse(this.SuperiorDateTimePicker.Value.ToShortDateString() + " 23:59:59"));
            this.cargarDatosEnDataGridView();            
        }

        private void grupoButton_Click(object sender, EventArgs e)
        {
            if ((this.SuperiorDateTimePicker.Value.Date - this.inferiorDateTimePicker.Value.Date).TotalDays < 1)
            {
                MessageBox.Show("seleccione un rango de fechas valido");
                return;
            }
            if (this.tipoComboBox.Text.Equals(string.Empty))
            {
                MessageBox.Show("Debe definir el tipo de proveedor");
                return;
            }
            this.dataTable = this.evaluacionDeDesempeno.evaluarByIdGrupo(int.Parse(this.grupoComboBox1.SelectedValue.ToString()), int.Parse(this.tipoComboBox.SelectedValue.ToString()), this.inferiorDateTimePicker.Value.Date, DateTime.Parse(this.SuperiorDateTimePicker.Value.ToShortDateString() + " 23:59:59"));
            this.cargarDatosEnDataGridView();                
        }

        private void IDButton_Click(object sender, EventArgs e)
        {
            if ((this.SuperiorDateTimePicker.Value.Date - this.inferiorDateTimePicker.Value.Date).TotalDays < 1)
            {
                MessageBox.Show("seleccione un rango de fechas valido");
                return;
            }
            if (this.IDtextBox.Text.Equals(string.Empty)) 
            {
                return;
            }
            this.dataTable = this.evaluacionDeDesempeno.evaluarByIdProveedor(this.IDtextBox.Text, this.inferiorDateTimePicker.Value.Date,DateTime.Parse(this.SuperiorDateTimePicker.Value.ToShortDateString() + " 23:59:59"));
            //MessageBox.Show(this.dataTable.Rows.Count+" - "+ this.IDtextBox.Text + " - " + this.inferiorDateTimePicker.Value.Date + " - " + DateTime.Parse(this.SuperiorDateTimePicker.Value.ToShortDateString() + " 23:59:59"));
            this.cargarDatosEnDataGridView();            
        }

        private void cargarDatosEnDataGridView() 
        {
            //-- asigno los datos correspondientes al dataGridView
            this.EvaluacionDataGridView.DataSource = this.dataTable;
            //-- solo muestro las columnas que son informativas
            foreach (DataGridViewColumn col in this.EvaluacionDataGridView.Columns)
            {
                if (!col.Name.Equals("Nº TOTAL DE ORDENES DE COMPRA") && !col.Name.Equals("VALOR TOTAL($)") && !col.Name.Equals("ID") && !col.Name.Equals("RAZON SOCIAL") && !col.Name.Equals("RESULTADO FINAL") && !col.Name.Equals("RESULTADO FINAL(%)") && !col.Name.Equals("TIPO") && !col.Name.Equals("GRUPO") && !col.Name.Equals("SERVICIO_PRINCIPAL"))
                    col.Visible = false;
            }
            //-- actualizo el dataGridView
           // this.EvaluacionDataGridView.Refresh();
        }

        private void inferiorDateTimePicker_ValueChanged(object sender, EventArgs e)
        {
            this.SuperiorDateTimePicker.MinDate = this.inferiorDateTimePicker.Value;
        }

        private void SuperiorDateTimePicker_ValueChanged(object sender, EventArgs e)
        {
            this.inferiorDateTimePicker.MaxDate = this.SuperiorDateTimePicker.Value;
        }

        private void XLSToolStripButton_Click(object sender, EventArgs e)
        {
            Exportacion.Exportacion.exportar(Exportacion.Exportacion.EnumTipoFormatosExportar.XLS, this.EvaluacionDataGridView, "Evaluacion de desempeño(" + DateTime.Now.ToShortDateString().Replace("/", "-") + ")", true);
        }

        private void IDtextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                this.IDButton_Click(null, null);
            }
        }

        private void grupoComboBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                this.grupoButton_Click(null, null);
            }
        }

        private void tipoComboBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                this.tipoButton_Click(null, null);
            }
        }

        private void helpPictureBox_Click(object sender, EventArgs e)
        {
            Help.ShowHelp(this, ConfiguracionDelSistema.manualDeUsuario, HelpNavigator.TableOfContents);
        }

        private void EncontrarProveedorPictureBox_Click(object sender, EventArgs e)
        {
            //--- el formulario debe estar guardado en la clase redirect, por que es muy pesado y demora mucho al abrirlo.
            try
            {
                herramientas.Redirect.getFormulario("BuscarProveedor").ShowDialog();
                //-- una vez se cierre el asistente utilizo el ID que supuestamente se selecciono de este formulario y lo guardo en el campo de busqueda.
                this.IDtextBox.Text = ((Forms.BuscarProveedor)herramientas.Redirect.getFormulario("BuscarProveedor")).IdEncontrado;
                //-- si el valor no es vacio, tonces realizo la busqueda.
                //if (!this.IDtextBox.Text.Equals(string.Empty))
                //{
                //    this.IDButton_Click(null, null);
                //}
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
            }
        }

        private void EvaluacionDataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            try
            {                
                //-- obtengo la fila a la cual se le dio doble click
                DataGridViewRow row = this.EvaluacionDataGridView.SelectedRows[0];

                if (row.Cells["RESULTADO FINAL(%)"].FormattedValue.ToString().Equals("-1")) {
                    MessageBox.Show("No hay registros");
                    Cursor.Current = Cursors.Default;
                    return;
                }
                //--- proveedores de bienes
                if (row.Cells["TIPO"].FormattedValue.ToString().ToUpper().Equals("BIEN"))
                {
                    //-- vacio el datatable
                    this.cORPORATIVADataSet.Reporte_evalDesempeno.Rows.Clear();
                    //-- creo la nueva fila.
                    _Maestro_Proveedores_CORPORATIVADataSet.Reporte_evalDesempenoRow evalDesRow = (_Maestro_Proveedores_CORPORATIVADataSet.Reporte_evalDesempenoRow)this.cORPORATIVADataSet.Reporte_evalDesempeno.NewRow();
                    //-- lleno la fila RECLAMOS SATISFACTORIAMENTE ATENDIDOS (RESULTADO)
                    evalDesRow.descuento_llamados_atencion = double.Parse(row.Cells["NÚMERO DE LLAMADOS DE ATENCIÓN (DESCUENTO)"].FormattedValue.ToString());
                    evalDesRow.fecha_inicio = inferiorDateTimePicker.Value.Date;
                    evalDesRow.fecha_fin = SuperiorDateTimePicker.Value.Date;
                    evalDesRow.grupo_proveedor = row.Cells["GRUPO"].FormattedValue.ToString();
                    evalDesRow.nit_proveedor = row.Cells["NIT"].FormattedValue.ToString();
                    evalDesRow.indicador_calidad = double.Parse(row.Cells["CALIDAD DEL PRODUCTO (CALIFICACION'%')"].FormattedValue.ToString());
                    evalDesRow.indicador_cantidad = double.Parse(row.Cells["CUMPLIMIENTO DE LAS UNIDADES ENTREGADAS (CALIFICACION'%')"].FormattedValue.ToString());
                    evalDesRow.indicador_tiempo = double.Parse(row.Cells["CUMPLIMIENTO DEL PLAZO EN LA ENTREGA (CALIFICACION'%')"].FormattedValue.ToString());
                    evalDesRow.indicador_reclamos = double.Parse(row.Cells["RECLAMOS SATISFACTORIAMENTE ATENDIDOS (CALIFICACION'%')"].FormattedValue.ToString());
                    evalDesRow.razon_social = row.Cells["RAZON SOCIAL"].FormattedValue.ToString();
                    evalDesRow.tipo_proveedor = row.Cells["TIPO"].FormattedValue.ToString();
                    evalDesRow.total_desempeno = double.Parse(row.Cells["RESULTADO FINAL(%)"].FormattedValue.ToString());
                    evalDesRow.usuario_cargo = Session.Seg_USUARRow.CARGO;
                    evalDesRow.usuario_nombre = Session.Seg_USUARRow.NOMBRE;
                    evalDesRow.proveedor_id = row.Cells["id"].FormattedValue.ToString(); 
                    //--- agrego la fila al datatable
                    this.cORPORATIVADataSet.Reporte_evalDesempeno.Rows.Add(evalDesRow);
                    
                    this.prV_EVAL_DESMPTableAdapter.FillByIdPRoveedoresFechas(this.cORPORATIVADataSet.PRV_EVAL_DESMP, evalDesRow.proveedor_id, this.inferiorDateTimePicker.Value.Date, this.SuperiorDateTimePicker.Value.Date);
                    
                    
                    //--- creo el reporte.
                    ((FormReport_evalDesempeno)herramientas.Redirect.getFormulario("FormReport_evalDesempeno")).mostrarReporte(this.cORPORATIVADataSet);
                }
                else
                {
                    //-- vacio el datatable
                    this.cORPORATIVADataSet.Reporte_evalDesempenoServicio.Rows.Clear();
                    //-- creo la nueva fila.
                    _Maestro_Proveedores_CORPORATIVADataSet.Reporte_evalDesempenoServicioRow evalDesRow = (_Maestro_Proveedores_CORPORATIVADataSet.Reporte_evalDesempenoServicioRow)this.cORPORATIVADataSet.Reporte_evalDesempenoServicio.NewRow();
                    //-- lleno la fila RECLAMOS SATISFACTORIAMENTE ATENDIDOS (RESULTADO)
                    evalDesRow.descuento_llamados_atencion = double.Parse(row.Cells["NÚMERO DE LLAMADOS DE ATENCIÓN (DESCUENTO)"].FormattedValue.ToString());
                    evalDesRow.fecha_inicio = inferiorDateTimePicker.Value.Date;
                    evalDesRow.fecha_fin = SuperiorDateTimePicker.Value.Date;
                    evalDesRow.grupo_proveedor = row.Cells["GRUPO"].FormattedValue.ToString();
                    evalDesRow.nit_proveedor = row.Cells["NIT"].FormattedValue.ToString();
                    evalDesRow.razon_social = row.Cells["RAZON SOCIAL"].FormattedValue.ToString();
                    evalDesRow.tipo_proveedor = row.Cells["TIPO"].FormattedValue.ToString();
                    evalDesRow.total_desempeno = double.Parse(row.Cells["RESULTADO FINAL(%)"].FormattedValue.ToString());
                    evalDesRow.usuario_cargo = Session.Seg_USUARRow.CARGO;
                    evalDesRow.usuario_nombre = Session.Seg_USUARRow.NOMBRE;
                    //-- si no tiene valor para algun indicador, entonces no lo imprimo 
                    if (!row.Cells["CALIDAD (CALIFICACION'%')"].FormattedValue.ToString().Equals(string.Empty))
                        evalDesRow.indicador_calidad = double.Parse(row.Cells["CALIDAD (CALIFICACION'%')"].FormattedValue.ToString());
                    if (!row.Cells["CUMPLIMIENTO (CALIFICACION'%')"].FormattedValue.ToString().Equals(string.Empty))
                        evalDesRow.indicador_cumplimiento = double.Parse(row.Cells["CUMPLIMIENTO (CALIFICACION'%')"].FormattedValue.ToString());
                    if (!row.Cells["SEGURIDAD Y MEDIO AMBIENTE (CALIFICACION'%')"].FormattedValue.ToString().Equals(string.Empty))
                        evalDesRow.indicador_seg_ambiente = double.Parse(row.Cells["SEGURIDAD Y MEDIO AMBIENTE (CALIFICACION'%')"].FormattedValue.ToString());
                    if (!row.Cells["ÍNDICE DE ACCIDENTALIDAD (CALIFICACION'%')"].FormattedValue.ToString().Equals(string.Empty))
                        evalDesRow.indicador_accidentalidad = double.Parse(row.Cells["ÍNDICE DE ACCIDENTALIDAD (CALIFICACION'%')"].FormattedValue.ToString());
                    evalDesRow.proveedor_id = row.Cells["id"].FormattedValue.ToString(); 
                    //--- agrego la fila al datatable
                    this.cORPORATIVADataSet.Reporte_evalDesempenoServicio.Rows.Add(evalDesRow);

                    this.prV_EVAL_DESMPTableAdapter.FillByIdPRoveedoresFechas(this.cORPORATIVADataSet.PRV_EVAL_DESMP, evalDesRow.proveedor_id, this.inferiorDateTimePicker.Value.Date, this.SuperiorDateTimePicker.Value.Date);
                    
                    //--- creo el reporte.
                    ((FormReport_evalDesempenoServicio)herramientas.Redirect.getFormulario("FormReport_evalDesempenoServicio")).mostrarReporte(this.cORPORATIVADataSet);
                }
            }
            catch (Exception ex) 
            {
                herramientas.MessageException.show(ex);
            }
        }

        private void comoSeHaceLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            try
            {
                System.Diagnostics.Process.Start(ConfiguracionDelSistema.directorioVideoTutoriales + "evaluacionDesempenoBienes.wmv");
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
            } 
        }

        private void EvaluacionDataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {

        }
    }
}
